package IT.DataAccess;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import java.util.logging.Level;
import java.util.logging.Logger;

import IT.Entities.Equipo;
import IT.Entities.EquipoDetalle;

public class DatEquipo implements IDatEquipo{
    
    private Equipo oEquipo;
    //private EquipoDetalle oDetalle;
    
    private List<Equipo> oLista;
    private List<EquipoDetalle> oListaDetalle;
    
    private BDConexion oBase;
    
    private Connection oConexion;
    private CallableStatement oCst;    
    private ResultSet oRst;    
    
    // Equipo
    public List<Equipo> Listar() {
        oLista=new ArrayList<Equipo>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoListar()}");
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new Equipo(oRst.getInt("cod_equi_in"), oRst.getString("nom_equi_vc"),                       
                        oRst.getInt("Cantidad")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
       return oLista;
    }

    public List<Equipo> Lider(int nEmpleado) {
        oLista=new ArrayList<Equipo>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoLider(?)}");
            oCst.setInt(1, nEmpleado);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new Equipo(oRst.getInt("cod_equi_in"), oRst.getString("nom_equi_vc")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
       return oLista;
    }
    
    public Equipo Ind(int nCodigo) {
        oEquipo=new Equipo();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EmpleadoListar()}");
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oEquipo.setCod_equi_in(oRst.getInt("cod_equi_in"));
                oEquipo.setNom_equi_vc(oRst.getString("nom_equi_vc"));
                oEquipo.setCantidad(oRst.getInt("Cantidad"));                       
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
       return oEquipo;
    }

    public int Insertar(Equipo ent) {
       int nCodigo=0;
       try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoInsertar(?,?)}");                 
            oCst.registerOutParameter(1, java.sql.Types.INTEGER);  
            oCst.setString(2, ent.getNom_equi_vc());
      
            oCst.execute();
            nCodigo=oCst.getInt(1);
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
       return nCodigo;
    }

    public void Editar(Equipo ent) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoEditar(?,?)}");                 
            oCst.setInt(1, ent.getCod_equi_in());  
            oCst.setString(2, ent.getNom_equi_vc());
      
            oCst.execute();         
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void Eliminar(int nCodigo) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoEliminar(?)}");                 
            oCst.setInt(1, nCodigo);      
      
            oCst.execute();         
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    // Detalle
    public List<EquipoDetalle> ListarDetalle(int nCodigo) {
        oListaDetalle=new ArrayList<EquipoDetalle>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoDetalleListar(?)}");
            oCst.setInt(1, nCodigo);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oListaDetalle.add(new EquipoDetalle(oRst.getInt("cod_equidet_in"), 
                        oRst.getBoolean("prin_equidet_bi"),                       
                        oRst.getInt("cod_emp_in"),
                        oRst.getString("empleado"),
                        oRst.getInt("cod_equi_in")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
       return oListaDetalle;
    }

    public void InsertarDetalle(EquipoDetalle ent) {
         try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoDetalleInsertar(?,?,?)}");                 
            oCst.setBoolean(1, ent.isPrin_equidet_bi());
            oCst.setInt(2, ent.getCod_emp_in());
            oCst.setInt(3, ent.getCod_equi_in());
                    
            oCst.execute();         
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void EliminarDetalle(int nCodigo) {
         try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoDetalleEliminar(?)}");                 
            oCst.setInt(1, nCodigo);      
      
            oCst.execute();         
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List<EquipoDetalle> ListarDetalleLider(int nEmpleado) {
        oListaDetalle=new ArrayList<EquipoDetalle>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EquipoDetalleLider(?)}");
            oCst.setInt(1, nEmpleado);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oListaDetalle.add(new EquipoDetalle(oRst.getInt("cod_equidet_in"), 
                        oRst.getBoolean("prin_equidet_bi"),                       
                        oRst.getInt("cod_emp_in"),
                        oRst.getString("empleado"),
                        oRst.getInt("cod_equi_in")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
       return oListaDetalle;
    }

}
